package org.autumn.algorithm.sort;

public class SelectionSort extends AbstractSort {
    /**
     * 选择排序
     * 从第一个元素开始,在数组中查询最小值,与数组第一个元素进行交换.
     * 从第二个元素开始,在数组中查询最小值,与数组第二个元素进行交换.
     * ...
     *
     * 假如数组长度为5,我们只需要交换4次就能保证数组排序完成
     */
    @Override
    public void doSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            // 最小值的下标
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                minIndex = arr[j] < arr[minIndex] ? j : minIndex;
            }
            // 如果最小值不是本次查询的第一个元素则交换
            if (i != minIndex){
                xorSwap(arr,i,minIndex);
            }
        }
    }
}
